Skip to content

Adds Gradle build that delegates to existing Ant build#214

Draft
NicoPiel wants to merge 8 commits intoOpenIntegrationEngine:mainfrom
NicoPiel:feature/gradle-build-ant
Draft

Adds Gradle build that delegates to existing Ant build#214
NicoPiel wants to merge 8 commits intoOpenIntegrationEngine:mainfrom
NicoPiel:feature/gradle-build-ant

Conversation

@NicoPiel
Copy link
Collaborator

@NicoPiel NicoPiel commented Dec 1, 2025

Fixes #52

Test with ./gradlew clean build -PdisableTests=true -PdisableSigning=true

Adds an initial Gradle build system that delegates to the existing Ant build to enable gradual migration and tooling improvements.

Highlights:

  • Introduces a root Gradle configuration that imports and delegates to the project's Ant build targets, avoiding immediate rewrite of existing build logic.
  • Adds the Gradle wrapper and supporting files (wrapper properties, jar, and scripts) so the repository can be built consistently without requiring a local Gradle install.
  • Adds per-subproject Gradle stub files to make the repository a multi-project Gradle layout and allow incremental conversion of subprojects.
  • Adds Gradle metadata/configuration (gradle.properties, dependency platform TOML)
  • Adds .gitattributes and .gitignore tweaks and normalizes an IDE classpath file to remove trailing encoding differences.
  • Configures Ant-to-Gradle interoperability (ant taskdefs and properties) and maps Ant targets to avoid conflicts with Gradle built-in tasks.

Why:

  • Allows us to start using Gradle tooling and the wrapper for builds, CI, and IDEs while preserving the working Ant build.
  • Supports incremental migration of subprojects to Gradle without disrupting existing build behavior.

Notes / Next steps:

  • Subprojects remain backed by the Ant build; plan incremental conversion of individual modules to native Gradle builds.
  • Verify CI pipelines and developer SDK setups pick up the wrapper and SDKMAN gradle setting.

@NicoPiel NicoPiel force-pushed the feature/gradle-build-ant branch 2 times, most recently from 6a6e3c7 to ddf0ada Compare December 1, 2025 15:00
Copy link
Contributor

@mgaffigan mgaffigan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other issues to address

  • CI build scripts need updated (.github/workflow/...)
  • Readme/Contributor documents need updated
  • ant mirth-build build target needs to be updated to block build outside of gradle with migration guidance in error message

Comment on lines +46 to +53
// Pass Gradle properties to Ant
project.findProperty("disableSigning")?.let {
ant.properties["disableSigning"] = it.toString()
}

project.findProperty("disableTests")?.let {
ant.properties["disableTests"] = it.toString()
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there other properties we need to be passing?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. I'm not sure. These are the only two I use and the only two available in mirth-build.xml, afaia.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know JUnit supports some properties for running specific tests instead of the whole suite, but I doubt anyone actually uses that. I have in the past, but I would need to look them up to even identify what they are called, because it's not something I do frequently. I wouldn't hold up this PR for that.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

9adf3f3

This commit added disableSigning as well as cert and keystore_property_file

@NicoPiel NicoPiel force-pushed the feature/gradle-build-ant branch 3 times, most recently from 4018468 to 6284f3b Compare December 29, 2025 00:31
Comment on lines +46 to +53
// Pass Gradle properties to Ant
project.findProperty("disableSigning")?.let {
ant.properties["disableSigning"] = it.toString()
}

project.findProperty("disableTests")?.let {
ant.properties["disableTests"] = it.toString()
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know JUnit supports some properties for running specific tests instead of the whole suite, but I doubt anyone actually uses that. I have in the past, but I would need to look them up to even identify what they are called, because it's not something I do frequently. I wouldn't hold up this PR for that.

Comment on lines +46 to +53
// Pass Gradle properties to Ant
project.findProperty("disableSigning")?.let {
ant.properties["disableSigning"] = it.toString()
}

project.findProperty("disableTests")?.let {
ant.properties["disableTests"] = it.toString()
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

9adf3f3

This commit added disableSigning as well as cert and keystore_property_file

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces Gradle build support to enable gradual migration from the existing Ant-based build system. It adds the Gradle wrapper (version 9.2.1), root and subproject build configurations that delegate to Ant, version catalog management, and updates to supporting files like .gitignore and .gitattributes.

Key Changes:

  • Adds Gradle wrapper scripts and configuration for reproducible builds without requiring local Gradle installation
  • Implements root build configuration that imports the Ant build and provides Ant-to-Gradle interoperability (JUnit taskdefs, property passing)
  • Creates stub subproject build files to establish multi-project structure while preserving Ant build delegation

Reviewed changes

Copilot reviewed 12 out of 16 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
settings.gradle.kts Configures multi-project structure with 5 subprojects and foojay-resolver plugin
build.gradle.kts Root build that imports Ant, configures JUnit tasks, passes properties, and renames conflicting targets
gradlew / gradlew.bat Gradle wrapper shell and batch scripts for cross-platform execution
gradle/wrapper/gradle-wrapper.properties Wrapper configuration specifying Gradle distribution URL and settings
gradle/wrapper/gradle-wrapper.jar Binary wrapper JAR for bootstrapping Gradle
gradle.properties Gradle build optimization settings (configuration cache, parallel, caching)
gradle/libs.versions.toml Version catalog with Guava dependency declaration
client/build.gradle.kts Stub build file with commented Ant import for client subproject
command/build.gradle.kts Stub build file with commented Ant import for command subproject
donkey/build.gradle.kts Stub build file with commented Ant import for donkey subproject
generator/build.gradle.kts Stub build file with commented Ant import for generator subproject
server/build.gradle.kts Stub build file with commented Ant import for server subproject
.gitattributes Adds line ending normalization for gradlew and binary handling for JARs
.gitignore Adds exclusion for Gradle build output directories
.sdkmanrc Formatting adjustment (no functional change)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@NicoPiel NicoPiel force-pushed the feature/gradle-build-ant branch from 8fbaf99 to 07c0f26 Compare January 3, 2026 01:47
NicoPiel and others added 7 commits March 13, 2026 20:39
Signed-off-by: Nico Piel <nico.piel@hotmail.de>
Signed-off-by: Nico Piel <nico.piel@hotmail.de>
Adds a top-level Gradle build that imports the existing Ant build to enable a gradual migration to Gradle while still using Ant for current tasks. Configures Ant to run JUnit (including ant-junit4) and exposes select Gradle properties to Ant; renames conflicting Ant targets to avoid collisions and makes the Gradle build task delegate to the Ant build target. Also adds placeholder Gradle files for subprojects and bumps the configured Gradle SDK version.

Co-authored-by: Mitch Gaffigan <mitch.gaffigan@comcast.net>
Signed-off-by: Nico Piel <nico.piel@hotmail.de>
Signed-off-by: Nico Piel <nico.piel@hotmail.de>
Signed-off-by: Nico Piel <nico.piel@hotmail.de>
Changes the root project name to a lowercase value to avoid case-related build/tooling issues (improves compatibility with Gradle/Ant and CI environments).

Signed-off-by: Nico Piel <nico.piel@hotmail.de>
Signed-off-by: Nico Piel <nico.piel@hotmail.de>
@NicoPiel NicoPiel force-pushed the feature/gradle-build-ant branch from 07c0f26 to 5b3e33d Compare March 13, 2026 19:39
@github-actions
Copy link

github-actions bot commented Mar 13, 2026

Test Results

   99 files   -  6    194 suites   - 8   6m 55s ⏱️ + 1m 4s
  609 tests  - 24    588 ✅  - 45  0 💤 ±0  10 ❌ +10  11 🔥 +11 
1 218 runs   - 48  1 176 ✅  - 90  0 💤 ±0  20 ❌ +20  22 🔥 +22 

For more details on these failures and errors, see this check.

Results for commit 4b87572. ± Comparison against base commit 0f0d8a4.

This pull request removes 24 tests.
com.mirth.connect.cli.launcher.CommandLineLauncherTest ‑ testLoadEmptyExtensionFolder
com.mirth.connect.cli.launcher.CommandLineLauncherTest ‑ testLoadExtensionWithLibsAtRoot
com.mirth.connect.cli.launcher.CommandLineLauncherTest ‑ testLoadExtensionWithLibsAtRootAndSubfolder
com.mirth.connect.cli.launcher.CommandLineLauncherTest ‑ testLoadExtensionWithMultileSharedLibsFromDifferentXml
com.mirth.connect.cli.launcher.CommandLineLauncherTest ‑ testLoadExtensionWithSameLibReferencedFromDifferentXml
com.mirth.connect.cli.launcher.CommandLineLauncherTest ‑ testLoadExtensionWithZeroSharedLibs
com.mirth.connect.client.ui.CommandLineOptionsTest ‑ testNormal
com.mirth.connect.client.ui.CommandLineOptionsTest ‑ testNullArgsUsesDefaults
com.mirth.connect.client.ui.CommandLineOptionsTest ‑ testParseSslForm
com.mirth.connect.client.ui.CommandLineOptionsTest ‑ testParseUsernameFormWithSsl
…

♻️ This comment has been updated with latest results.

@NicoPiel NicoPiel marked this pull request as draft March 13, 2026 20:04
@NicoPiel NicoPiel self-assigned this Mar 13, 2026
…uild

CI workflow now invokes the Gradle wrapper (./gradlew build) for signed and unsigned builds instead of calling Ant directly. The root Gradle build was extended to set project group/version, provide repositories for subprojects, and pass the coverage and disableTests properties through to the imported Ant build. Added version and archiveEntryDate to gradle.properties and updated the settings docs link.

This lets the top-level Gradle build act as a thin wrapper around the existing Ant build, enabling gradual migration to Gradle while keeping CI changes minimal.

Signed-off-by: Nico Piel <nico.piel@hotmail.de>
@NicoPiel NicoPiel requested review from a team, gibson9583 and kayyagari and removed request for a team March 13, 2026 20:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[IDEA] Introduce Dependency Management (e.g. Gradle or Maven)

4 participants